package com.szrt.day20170505.ch04;


/**
 * binary tree  BTree 二叉树
 * 
 */
public class BTree {
	
	/**
	 * 根节点
	 */
	private Node root;
	
	
	
	public BTree(Node root){
		this.root = root;
	}



	/**
	 * 
	 * @param parentNode 参照物节点  第1次是根节点
	 * @param addNode    我要增加的节点
	 */
	public void addNode(Node parentNode ,Node addNode) {
		
		
		// 让当前节点指向参照物节点  第1次是根节点
		Node p = parentNode;
		
		
		if(addNode.getData() < p.getData()){
			if(p.getLeftChild() == null){
				//当前节点没有左子树
				p.setLeftChild(addNode);
			}else{
				//当前节点最少有1个左子树
				this.addNode(p.getLeftChild(), addNode);
			}
		}else{
			if(p.getRightChild() == null){
				//当前节点没有右子树
				p.setRightChild(addNode);
			}else{
				//当前节点最少有1个右子树
				this.addNode(p.getRightChild(), addNode);
			}
		}
	}
	
	
	
	
	/**
	 * @return
	 */
	public Node findMax(){
		
		//1 找到根节点
		Node p = this.root;
		
		//往右边找
		
		while(true){
			if(p.getRightChild() == null){
				return p;
			}else{
				p=p.getRightChild();
			}
			
		}
		
	}
	
	
	/**
	 * @param parentNode 参照物节点  第1次是根节点
	 * 先根遍历  先打印根结果  再打印左子树  再打印右子树? 递归
	 * 先根遍历，遍历的顺序是 根，左子树，右子树
	 * 中根遍历，遍历的顺序是 左子树，根，右子树
	 * 后根遍历，遍历的顺序是 左子树，右子树，根
	 * 
	 * 凡是超过5层的循环不能使用
	 * 文件递归查找
	 */
	public void printTree(Node parentNode){
		
		if(null != parentNode){
			//1 先打印根
			System.out.print(parentNode.getData()+"-->");
			
			//2 再打印左子树
			this.printTree(parentNode.getLeftChild());
			
			//3在打印右子树
			this.printTree(parentNode.getRightChild());
		}
		
	}
	
	
	

}
